package bark;

import org.hq.upvideo.EupVideoTaskType;
import org.hq.sihu.task.ParseHtmlSiHuTask;
import org.hq.sihu.task.WebPojoTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
 * 更新视频数据 联网任务服务线程
 */
public class HttpTask extends WebPojoTask {

    Logger logger = LoggerFactory.getLogger(HttpTask.class);
    private int netCount;//联网次数
    private final int maxNetCount = 20;

    public HttpTask() {
        this(null);
    }

    public HttpTask(WebPojoTask obj) {
        super(obj);
        this.netCount = 0;
    }

    @Override
    public void run() {
        //任务类型判断
        switch (eupVideoTaskType) {
            //联网获取 四虎 分组网页数量
            case NETWORK_SIHU_GROUP_COUNT:
                //设置任务提交类型
                this.taskType(EupVideoTaskType.PARSE_HTML_SIHU_PAGE_COUNT);
                break;
            //联网获取 HTML视频条目 用于获取视频http路径 数据类型四虎
            case NET_VIDEO_ITEM_SIHU:
                //设置任务提交类型
                this.taskType(EupVideoTaskType.PARSE_HTML_SIHU_VIDEO_ITEM);
                break;
        }
        //任务完成 通知服务
        this.ups.taskFinish();
    }

    /**
     * 任务类型执行
     *
     * @return 成功返回 true 失败 false
     */
    private void taskType(EupVideoTaskType type) {
        try {
            String url = this.getWebUrl() + this.getTaskPath();
            // 去网上获取数据
            String html = this.ups.getRequestToString(this.getWebUrl() + this.getTaskPath());
            if (html != null) {
                //任务提交去解析 html
                ParseHtmlSiHuTask ph = new ParseHtmlSiHuTask(this);
                // 设置任务类型
                ph.setEupVideoTaskType(type);
                //设置任务数据
                ph.setHtmlData(html);
                //提交任务
                this.ups.submit(ph);
                return;
            }
            // 数据为空
            if (this.maxNetCount > this.netCount) {
                //重新连接网络
                this.taskType(type);
                this.netCount++;
                return;
            }
        } catch (IOException e) {
            //   logger.error(this.getTaskPath());
            // 联网异常处理
            if (this.maxNetCount > this.netCount) {
              logger.debug("联网异常处理", eupVideoTaskType);
                //重新连接网络
                this.taskType(type);
                this.netCount++;
                return;
            }
        }
        logger.debug("数据为空", eupVideoTaskType);
        //任务出错处理
        this.ups.taskError(this);

    }


}
